home *** CD-ROM | disk | FTP | other *** search
- /*
- ##########################################################################
- #### ####
- #### The MusicBox Project ####
- #### ============================ ####
- #### ####
- #### Inquiry.c ####
- #### ####
- #### Version 2.1os -- September 29, 2000 ####
- #### ####
- #### Copyright (C) 1994 Thomas Dreibholz ####
- #### 2000 Molbachweg 7 ####
- #### 51674 Wiehl ####
- #### Germany ####
- #### ####
- #### EMail: Dreibholz@bigfoot.com ####
- #### WWW: http://www.bigfoot.com/~dreibholz ####
- #### ####
- ##########################################################################
- */
- /***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-
- /* SCSI-Inquiry Hauptprogramm */
-
- #define TITEL "SCSI Inquiry - Version 2.1os Copyright (C) 1994-2000 by Thomas Dreibholz"
- #define VERSTR "$VER: Inquiry 2.1os (Sep 29 2000) - Copyright (C) 1994-2000 by Thomas Dreibholz"
-
- extern struct ExecBase *SysBase;
- struct GfxBase *GfxBase;
- struct IntuitionBase *IntuitionBase;
- struct Library *DiskfontBase;
- struct Library *MusicBoxBase;
-
- struct IOStdReq *io;
- struct MsgPort *port;
- struct SCSICmd *scsi;
- struct Device *found;
- struct Window *win;
- struct RastPort *rp;
- struct TextFont *Font,*TimesFont;
-
- UBYTE *DevName;
- UBYTE *sense;
- UBYTE str[80],
- str2[20];
- UBYTE *VerStr=VERSTR;
-
- struct DriveInfo
- {
- UBYTE PeripheralType;
- UBYTE Modifier;
- UBYTE Version;
- UBYTE Flags1;
- UBYTE AdditionalLength;
- UBYTE reserved[2];
- UBYTE Flags2;
- UBYTE Vendor[8];
- UBYTE Product[16];
- UBYTE Revision[4];
- };
-
- struct DriveInfo *di;
-
- UBYTE *DevNames[]=
- {
- "----- <change me> -----",
- "scsi.device",
- "hddisk.device",
- "suprascsi.device",
- "gvpscsi.device",
- "HardFrame.device",
- "IVS_SCSI.device",
- "IVS_SCSIpro.device",
- "icddisk.device",
- "harddisk.device",
- "ADD_scsi.device",
- "Nexus.device",
- "ALF.device",
- 0L
- };
-
- UBYTE cmd_driveinfo[6] = { 0x12, 0x00, 0x00, 0x00, 0x90, 0x00 };
-
- struct TextAttr times = {
- ( STRPTR )"times.font", 15, 0x00, 0x42 };
-
- struct NewWindow nw=
- {
- 30,30,580,150,0,1,
- CLOSEWINDOW,
- WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG|ACTIVATE|GIMMEZEROZERO,
- 0L,0L,TITEL,0L,0L,
- 100,40,640,256,
- WBENCHSCREEN
- };
-
-
- void CloseAll()
- {
- if(win) CloseWindow(win);
- if(scsi) FreeMem(scsi,sizeof(struct SCSICmd));
- if(di) FreeMem(di,sizeof(struct DriveInfo));
- if(sense) FreeMem(sense,18);
- if(io) DeleteExtIO(io);
- if(port) DeletePort(port);
- if(MusicBoxBase) CloseLibrary(MusicBoxBase);
- CloseLibrary(GfxBase);
- CloseLibrary(IntuitionBase);
- exit(0);
- }
-
- void OpenAll()
- {
- register int i;
-
- GfxBase=OpenLibrary("graphics.library",0L);
- IntuitionBase=OpenLibrary("intuition.library",0L);
- if((GfxBase==NULL)||(IntuitionBase==NULL)) exit(0);
-
- DiskfontBase=OpenLibrary("diskfont.library",0L);
- if(DiskfontBase!=NULL)
- Font=OpenDiskFont(×);
-
- puts("Mus");
- MusicBoxBase=OpenLibrary("musicbox.library",0L);
- puts("OK");
-
- scsi=AllocMem(sizeof(struct SCSICmd),MEMF_CLEAR|MEMF_PUBLIC);
- di=AllocMem(sizeof(struct DriveInfo),MEMF_CLEAR|MEMF_PUBLIC);
- sense=AllocMem(18,MEMF_CLEAR|MEMF_PUBLIC);
- if((scsi==NULL)||(di==NULL)||(sense==NULL))
- {
- puts("Kein Speicher!");
- CloseAll();
- }
-
- port=CreatePort(0L,0L);
- if(port==NULL)
- {
- puts("Kein Speicher für Port!");
- CloseAll();
- }
-
- io=CreateExtIO(port,sizeof(struct IOStdReq));
- if(io==NULL)
- {
- puts("Kein Speicher für IO-Request!");
- CloseAll();
- }
-
- win=OpenWindow(&nw);
- if(win==NULL)
- {
- puts("Kein Speicher für Fenster!");
- CloseAll();
- }
- rp=win->RPort;
- if((Font)&&(win->WScreen->Height>299)) SetFont(rp,Font);
-
- i=0;
- DevName=NULL;
- do
- {
- found=FindName(&SysBase->DeviceList,DevNames[i]);
- if(found!=NULL)
- {
- DevName=DevNames[i];
- break;
- }
- else
- i++;
- } while(DevNames[i]!=NULL);
- }
-
-
- WORD SCSI(cmd,len,buf,buflen,direction)
- UBYTE *cmd;
- UBYTE *buf;
- LONG buflen;
- WORD len,direction;
- {
- io->io_Command=HD_SCSICMD;
- io->io_Data=scsi;
- io->io_Length=sizeof(struct SCSICmd);
-
- scsi->scsi_Data=buf;
- scsi->scsi_Length=buflen;
- scsi->scsi_Flags=SCSIF_AUTOSENSE|direction;
- scsi->scsi_SenseData=sense;
- scsi->scsi_SenseLength=18;
- scsi->scsi_SenseActual=0;
-
- scsi->scsi_Command=cmd;
- scsi->scsi_CmdLength=len;
-
- DoIO(io);
- return(scsi->scsi_Status);
- }
-
- void Out(x,i)
- int x,i;
- {
- Move(rp,x,(i*15)+15);
- Text(rp,str,strlen(&str));
- }
-
- void Inquiry(num)
- {
- LONG dev;
- WORD test;
-
- dev=OpenDevice(DevName,num,io,0);
- if(dev==0)
- {
- test=SCSI(&cmd_driveinfo,6,di,sizeof(struct DriveInfo),SCSIF_READ);
- CloseDevice(io);
- if(test!=0)
- {
- sprintf("SCSI-Status = $%x",test);
- Out(70,num);
- }
- else
- {
- switch(di->PeripheralType)
- {
- case 0x00:
- strcpy(&str,"Harddisk");
- break;
- case 0x01:
- strcpy(&str,"Streamer");
- break;
- case 0x05:
- strcpy(&str,"CD-ROM");
- break;
- default:
- sprintf(&str,"Type %d",di->PeripheralType);
- break;
- }
- Out(100,num);
- strncpy(&str2,&di->Vendor,8); str2[8]=0x00;
- sprintf(&str,"%s ",&str2);
- strncpy(&str2,&di->Product,16); str2[16]=0x00;
- strcat(&str,&str2);
- Out(230,num);
- strncpy(&str,&di->Revision,4); str[4]=0x00;
- Out(520,num);
- }
- }
- else
- {
- strcpy(&str,"unused");
- Out(120,num);
- }
- }
-
- void main(argc,argv)
- int argc;
- UBYTE *argv[];
- {
- register int i,j;
- register struct IntuiMessage *msg;
-
- if(argc==2)
- {
- DevNames[0]=argv[1];
- }
-
- OpenAll();
- if(MusicBoxBase) SleepPointer(win);
-
- SetAPen(rp,2);
- for(i=0;i<7;i++)
- {
- sprintf(&str,"Unit #%d: ",i);
- Out(10,i);
- }
-
- if(DevName==NULL)
- {
- strcpy(&str,"?");
- for(i=0;i<7;i++)
- Out(120,i);
- sprintf(&str,"Device = ??? Unknown controller",DevName);
- Out(30,7);
- }
- else
- {
- sprintf(&str,"Device = %s",DevName);
- Out(30,7);
- if(!(strcmp(DevName,"scsi.device")))
- {
- strcpy(&str,"Amiga 590/2091 SCSI");
- Out(270,7);
- }
-
- for(i=0;i<7;i++) Inquiry(i);
- }
- ClearPointer(win);
-
- WaitPort(win->UserPort);
- ReplyMsg(GetMsg(win->UserPort));
-
- CloseAll();
- }
-
-